package net.interneteidee.dao;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Root;

import net.interneteidee.entity.Categoria;
import net.interneteidee.entity.Cliente;
import net.interneteidee.entity.Cliente_;
import net.interneteidee.entity.Fattura;
import net.interneteidee.entity.Fattura_;
import net.interneteidee.entity.LineaFattura;
import net.interneteidee.entity.LineaFattura_;
import net.interneteidee.entity.LineaOrdine;
import net.interneteidee.entity.LineaOrdine_;
import net.interneteidee.entity.Ordine;
import net.interneteidee.entity.Ordine_;
import net.interneteidee.entity.Prodotto;

@Stateless
public class ProdottoDao extends GenericDao<Prodotto> {

	
	
	public ProdottoDao() {
		// TODO Auto-generated constructor stub
		super(Prodotto.class);

	}
	
	@PostConstruct
	public void initParameter(){
		
		criteriaBuilder = entityManager.getCriteriaBuilder();
		
	}
	
	public List<Prodotto> findProdottiOrdinati(Date dataDa, Date dataA){
		
		criteriaQuery = criteriaBuilder.createQuery(Prodotto.class);
		Root<Ordine> rootOrdine = criteriaQuery.from(Ordine.class);
		
		List<Prodotto> prodottiOrdinati = new LinkedList<Prodotto>();
		Join<LineaOrdine,Prodotto> join = rootOrdine.join(Ordine_.lineeOrdine).join(LineaOrdine_.prodotto);
		criteriaQuery.select(join).distinct(true).where(criteriaBuilder.between(rootOrdine.get(Ordine_.dataAccettazione),dataDa,dataA));

		prodottiOrdinati = entityManager.createQuery(criteriaQuery).getResultList();
		return prodottiOrdinati;
		
	}
	
	public List<Prodotto> findProdottiFatturati(Date dataDa, Date dataA){
		
		criteriaQuery = criteriaBuilder.createQuery(Prodotto.class);
		Root<Fattura> rootFattura = criteriaQuery.from(Fattura.class);
		
		List<Prodotto> prodottiFatturati = new LinkedList<Prodotto>();
		Join<LineaFattura,Prodotto> join = rootFattura.join(Fattura_.lineeFattura).join(LineaFattura_.prodotto);

		criteriaQuery.select(join).distinct(true).where(criteriaBuilder.between(rootFattura.get(Fattura_.dataEmissione),dataDa,dataA));

		prodottiFatturati = entityManager.createQuery(criteriaQuery).getResultList();
		return prodottiFatturati;
		
	}
	
	
}
